Skip to content

Add model watchlist candidates#11

Merged
dzarlax merged 1 commit into
mainfrom
codex/model-watchlist-candidates
Jun 16, 2026
Merged

Add model watchlist candidates#11
dzarlax merged 1 commit into
mainfrom
codex/model-watchlist-candidates

Conversation

@dzarlax

@dzarlax dzarlax commented Jun 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • add Watchlist candidates for preset model recommendations
  • show Watchlist models as a separate Needs review section
  • keep free and unstable variants out of Watchlist by default
  • add focused recommendation and section-order tests

Tests

  • go test -count=1 ./internal/adminapi
  • go test -count=1 ./...

Summary by CodeRabbit

New Features

  • Added a dedicated "Needs review" section in the model browser to categorize flagged models for easier review and identification.
  • Watchlist models are now included in recommendations with role-specific eligibility filtering and value calculations.

Bug Fixes

  • Updated status labels to properly identify models outside proven model family allowlists.

@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7a0a5bb4-b156-4943-92d9-11cc8c303257

📥 Commits

Reviewing files that changed from the base of the PR and between ded31ff and 5cbe987.

📒 Files selected for processing (4)
  • internal/adminapi/handlers.go
  • internal/adminapi/model_display.go
  • internal/adminapi/recommend.go
  • internal/adminapi/recommend_test.go

📝 Walkthrough

Walkthrough

Preset-based model recommendations now append a "watchlist" candidate set for models from unknown families. A new appendWatchlistCandidates function filters, enriches, scores, and sorts these candidates. A dedicated "Needs review" UI section is added to section ordering, key routing, status labels, and primary reason strings.

Changes

Watchlist Recommendation Feature

Layer / File(s) Summary
Watchlist candidate generation
internal/adminapi/recommend.go
Adds appendWatchlistCandidates, watchlistEligible, and watchlistAxes; applyPreset now stores near-frontier output then appends up to 4 watchlist candidates before returning.
UI section ordering, key routing, and display labels
internal/adminapi/handlers.go, internal/adminapi/model_display.go
Adds watchlist to preset section order ("Needs review"), routes models with Source/Section == "watchlist" to that section key, and sets corresponding status label and primary reason string.
Tests for watchlist behavior
internal/adminapi/recommend_test.go
Adds two new tests for unknown-family inclusion and free/unstable exclusion; updates TestModelSectionsSplitRecommendationBuckets to expect 4 sections with a watchlist entry.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • Dzarlax-AI/personal_assistant#5: Introduces the modelStatusLabel/modelPrimaryReason badge plumbing and deduplication logic in model_display.go that this PR extends with the watchlist routing path.

Poem

🐇 A watchlist was born on a fine sunny day,
For models unknown who have wandered astray,
"Needs review!" cries the rabbit, with index in paw,
Unknown family models now follow the law.
Four candidates sorted, then neatly displayed —
No free or unstable shall sneak through unweighed! 🌟

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/model-watchlist-candidates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@dzarlax dzarlax merged commit 8de9eb0 into main Jun 16, 2026
5 of 6 checks passed
@dzarlax dzarlax deleted the codex/model-watchlist-candidates branch June 16, 2026 08:25
@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/Dzarlax-AI/personal_assistant/issues/comments/4716459203","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- review_stack_entry_start -->\n\n[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/Dzarlax-AI/personal_assistant/pull/11?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)\n\n<!-- review_stack_entry_end -->\n<!-- This is an auto-generated comment: review in progress by coderabbit.ai -->\n\n> [!NOTE]\n> Currently processing new changes in this PR. This may take a few minutes, please wait...\n> \n> <details>\n> <summary>⚙️ Run configuration</summary>\n> \n> **Configuration used**: defaults\n> \n> **Review profile**: CHILL\n> \n> **Plan**: Pro Plus\n> \n> **Run ID**: `7a0a5bb4-b156-4943-92d9-11cc8c303257`\n> \n> </details>\n> \n> <details>\n> <summary>📥 Commits</summary>\n> \n> Reviewing files that changed from the base of the PR and between ded31ff5caa22c4451ec06cd135ca3d3e7d99079 and 5cbe987cc5ef06c82e465aa51ff07033dd7bb931.\n> \n> </details>\n> \n> <details>\n> <summary>📒 Files selected for processing (4)</summary>\n> \n> * `internal/adminapi/handlers.go`\n> * `internal/adminapi/model_display.go`\n> * `internal/adminapi/recommend.go`\n> * `internal/adminapi/recommend_test.go`\n> \n> </details>\n> \n> ```ascii\n>  __________________________________________________________________________________\n> < Controlling complexity is the essence of computer programming. - Brian Kernighan >\n>  ----------------------------------------------------------------------------------\n>   \\\n>    \\   \\\n>         \\ /\\\n>         ( )\n>       .( o ).\n> ```\n\n<!-- end of auto-generated comment: review in progress by coderabbit.ai -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>📝 Generate docstrings</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> Create stacked PR\n- [ ] <!-- {\"checkboxId\": \"3e1879ae-f29b-4d0d-8e06-d12b7ba33d98\"} --> Commit on current branch\n\n</details>\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Commit unit tests in branch `codex/model-watchlist-candidates`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=Dzarlax-AI/personal_assistant&utm_content=11)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->"},"request":{"retryCount":3,"signal":{},"retries":3,"retryAfter":16}}}

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5cbe987cc5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +535 to +536
case "classifier", "simple", "default", "complex", "multimodal":
return func(m uiModel) (float64, float64) { return roleQuality(m, role), effectiveBlendedPriceOf(m) }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use prompt price for classifier watchlist ranking

For the classifier preset, the existing axes rank by prompt price because the classifier emits only a tiny completion, but watchlist candidates now use blended input/output cost. When an outside-allowlist classifier has cheap input tokens but expensive output tokens, it can be ranked and labeled as worse value than a model with higher prompt cost, even though the route's actual cost is prompt-dominated and the regular classifier preset would prefer it.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant